package org.zmhhxl.sample3.oauth2.a.advice;


import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.zmhhxl.common.core.domain.Result;

/**
 * 全局异常处理器
 *
 * @author vains
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 处理所有异常的控制器方法。
     * 处理所有未声明的异常
     * 当调用接口时发生异常，此方法将捕获这些异常，并返回一个包含异常信息的结果对象。
     *
     * @param e 异常对象，表示发生的错误。未声明的异常
     * @param request HttpServletRequest对象，用于获取请求信息。
     * @return Result<String> 返回一个结果对象，其中包含异常信息。
     */
    @ExceptionHandler(Exception.class)
    public Result<String> exception(Exception e, HttpServletRequest request) {
        // 记录异常信息，包括接口名称和异常消息
        log.error("Oauth 接口[{}]调用失败，原因：{}", request.getRequestURI(), e.getMessage(), e);
        // 返回错误结果，包含异常消息
        return Result.error(e.getMessage());
    }

    /**
     * 专门处理OPTIONS请求时的异常
     * @param ex OPTIONS请求时的异常
     * @return 错误响应
//     */
//    @ExceptionHandler(value = { OptionsException.class }) // 替换为你的Options异常类
//    public ResponseEntity<ErrorResponse> handleOptionsException(OptionsException ex) {
//        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST.value(), ex.getMessage());
//        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
//    }

    // 示例错误响应类
//    @Data
//    private static class ErrorResponse {
//        private int code;
//        private String message;
//
//        // 构造器、getter和setter省略
//    }

}
